package fr.dauphine.bookstore.filters;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

import fr.dauphine.bookstore.commun.MessagesUtil;
import fr.dauphine.bookstore.frontoffice.SessionUtil;
import fr.dauphine.bookstore.modele.User;

/**
 * Filtre du Front Office<br>
 * L'utilisateur doit etre identifie (present en session) pour acceder a
 * certaines pages.
 */
public final class FrontOfficeFilter implements Filter {

	/**
	 * Execution du filtre.
	 * 
	 * @param request
	 *            Requete
	 * @param response
	 *            Reponse
	 * @param chain
	 *            Filtres suivants
	 * @throws ServletException
	 *             Erreur de servlet
	 * @throws IOException
	 *             Erreur d'entree/sortie
	 */
	public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		User user = SessionUtil.getUser(httpRequest.getSession());

		// L'utilisateur peut acceder a la page demandee
		if (user != null) {
			chain.doFilter(request, response);

			// Il ne peut pas y acceder
		} else {
			String referer = httpRequest.getHeader("Referer");
			if (StringUtils.isEmpty(referer)) {
				referer = "index.jsp";
			}

			String[] url = referer.split("/");

			MessagesUtil.addMessage(httpRequest, MessagesUtil.ERROR, "Merci de vous identifier pour acceder a cette page");

			request.getRequestDispatcher(url[url.length - 1]).forward(request, response);
		}
	}

	/**
	 * Destruction du filtre.
	 */
	public void destroy() {
	}

	/**
	 * Initialisation du filtre.
	 * 
	 * @param config
	 *            Configuration
	 * @throws ServletException
	 *             Erreur de servlet
	 */
	public void init(final FilterConfig config) throws ServletException {
	}
}
